/*
2021-8-10
https://www.acwing.com/problem/content/239/
*/
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>

using namespace std;
const int N=200010;
unordered_map<int,int>s;
int cnt;
int p[N];

struct node
{
    int x,y,e;
}query[N];

int get(int x)
{
    if(s.count(x)==0) s[x]=++cnt;
    return s[x];
}

int find(int x)
{
    if(x!=p[x]) p[x]=find(p[x]);
    return p[x];
}

int main()
{
    int T;
    cin>>T;
    while(T--)
    {
        s.clear();
        cnt=0;
        int m;
        scanf("%d",&m);
        
        for(int i=0;i<m;i++)
        {
            int x,y,e;
            scanf("%d%d%d",&x,&y,&e);
            query[i]={get(x),get(y),e};
        }
        
        for(int i=1;i<=cnt;i++) p[i]=i;
        
        for(int i=0;i<m;i++)
            if(query[i].e==1)
            {
                int pa=find(query[i].x),pb=find(query[i].y);
                p[pa]=pb;
            }
        
        bool ans=false;
        
        for(int i=0;i<m;i++)
            if(query[i].e==0)
            {
                int pa=find(query[i].x),pb=find(query[i].y);
                if(pa==pb)
                {
                    ans=true;
                    break;
                }
            }
        
        if(ans) puts("NO");
        else puts("YES");
        
    }
    return 0;
}
